package com.octopus.core.parser;

import com.octopus.core.Response;
import com.octopus.core.result.Result;
import com.octopus.core.utils.StringUtils;
import java.io.UnsupportedEncodingException;
import lombok.Getter;
import lombok.Setter;

/**
 * 文本内容解析
 *
 * @author shoulai.yang@gmail.com
 * @date 2019/07/31
 */
@Setter
@Getter
public  class TextParser extends BinaryParser {

  /** 默认文本内容编码 */
  private static final String DEFAULT_CHARSET = "UTF-8";

  @Override
  public final ParseResult parse(byte[] data, Response response) throws ParseException {
    try {
      String text = new String(data, this.getCharset(response));
      return this.parse(text, response);
    } catch (UnsupportedEncodingException e) {
      throw new RuntimeException(e);
    }
  }

  /**
   * 获取编码方式
   *
   * <p>依次从响应头，预期编码，默认编码获取
   *
   * @param response 响应信息
   * @return 编码方式
   */
  private String getCharset(Response response) {
    return StringUtils.isEmpty(response.charset())
        ? (StringUtils.isEmpty(response.request().charset())
            ? DEFAULT_CHARSET
            : response.request().charset())
        : response.charset();
  }

  /**
   * 文本内容解析
   *
   * <p>覆盖此方法以实现自定的解析规则
   *
   * @param text 文本内容
   * @param response 响应内容
   * @return 解析数据对象
   * @throws ParseException 解析异常
   */
  public  ParseResult parse(String text, Response response) throws ParseException{
    return ParseResult.me().body(Result.me().obj(text));
  }
}
